package practica3;

import java.io.*;
import java.util.Scanner;

/*
*Esta clase almacena una coleccion de metodos que facilitan el trabajo con la informacion
*sobre los productos comercializados por una empresa, sus clientes y sus operaciones de
*venta de productos a clientes
*/
public class Comercio {
	/*
	*Pre: [nombre] es el nombre del ﬁchero de productos de una empresa
	*Post : Devuelve el numero de productos cuyos precios estan registrados en el ﬁchero de
	*productos de la empresa. En caso de producirse algun error en la lectura del ﬁchero
	*devuelve un valor negativo
	*/
	public static int numProductos (String nombre){
		try {
			DataInputStream fProductos = new DataInputStream (new FileInputStream(nombre));
			int numero = numProductos(fProductos, 0);
			fProductos.close();
			return numero;
		}
		catch (IOException e) { return -1; }
	}
	private static int numProductos (DataInputStream f, int cuenta) {
		try{
			f.readInt();		//lee un producto
			f.readDouble();		//lee su precio
			return numProductos(f, cuenta+1);
		}
		catch (EOFException e){return cuenta;}
		catch (IOException e) { return -1;}		
	}
	/*
	*Pre: [nombre] es el nombre del ﬁchero de clientes de la empresa
	*Post : Devuelve el numero de clientes registrados en el ﬁchero de clientes de la empresa.
	*En caso de producirse algun error en la lectura del ﬁchero devuelve un valor negativo
	*/
	public static int numClientes ( String nombre){
		try {
			Scanner fClientes = new Scanner (new File(nombre));
			int cuentaClientes = numClientes(fClientes, 0);
			fClientes.close(); return cuentaClientes;
		}
		catch (IOException e) {return -1;}				
	}
	private static int numClientes (Scanner f, int cuenta){
		if (f.hasNextLine()) {
			f.nextLine();
			return numClientes(f,cuenta+1);
		}
		else {return cuenta;}
	}
	/*
	*Pre: [nombre] es el nombre de un ﬁchero de productos de la empresa
	*Post : Si en el ﬁchero de productos hay un producto cuyo codigo coincide con el valor ´
	*de [producto] entonces devuelve el precio unitario del producto; en caso contrario
	*devuelve un valor negativo . En caso de producirse algun error en la lectura ´
	*del ﬁchero devuelve tambien un valor negativo ´
	*/
	public static double precio ( String nombre, int producto){
		try{
			DataInputStream fProductos = new DataInputStream (new FileInputStream(nombre));
			double suPrecio = precio(fProductos,producto);
			fProductos.close();
			return suPrecio;
		}
		catch (IOException e) {return -1.0;}		
	}
	private static double precio (DataInputStream f,int producto) {
		try {
			int prod = f.readInt();
			double precio = f.readDouble();
			if (prod==producto) {return precio;}
			else {return precio(f, producto);}
		}
		catch (EOFException e) {return -1.0;}
		catch (IOException e) {return -1.0;}
	}

	/*
	*Pre: [nombre] es el nombre del ﬁchero de clientes de la empresa
	*Post : Si en el ﬁchero de clientes hay un cliente cuyo codigo coincide con el valor de [ cliente ] ´
	*entonces devuelve el nombre del cliente ; en caso contrario devuelve un valor [ null ]. En
	*caso de producirse algun error en la lectura del ﬁchero devuelve tambi ´ en [ null ] ´
	*/
	public static String nombreCliente ( String nombre, int cliente ){
		
		return null;
		
	}
	/*
	*Pre: [nombreFV] es el nombre del ﬁchero de ventas de la empresa
	*Post : Crea una tabla de objetos que representan todas las ventas registradas en el ﬁchero
	*de ventas de la empresa de productos al cliente cuyo codigo es igual a [ cliente ] ´
	*y devuelve la referencia a la tabla creada. En caso de producirse algun error en la ´
	*lectura del ﬁchero devuelve [ null ]
	*/
	public static Venta [] ventasACliente ( String nombreFV, int cliente ){
		
		return venta[];
		
	}
	/*
	*Pre: [nombreFV] es el nombre del ﬁchero de ventas de la empresa registradas en el ﬁchero
	*Post : Crea una tabla de objetos que representan todas las ventas de la empresa del producto
	*cuyo codigo es igual a [producto] y devuelve la referencia a la tabla creada. En caso ´
	*de producirse algun error en la lectura del ﬁchero devuelve [ null ] ´
	*/
	public static Venta [] ventasDeProducto ( String nombreFV, int producto){
		
	}
}